home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Games of Daze
/
Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso
/
x2ftp
/
msdos
/
source
/
crosfade
/
readmeor.els
< prev
Wrap
Text File
|
1994-09-29
|
12KB
|
314 lines
╒═══════════════════════════════════════════════════════════════════════════╕
│ │
│ ***** Cross Fade ***** │
│ │
│ By Esak (September 29, 1994) │
╘═══════════════════════════════════════════════════════════════════════════╛
══════════════════════════════════════════════════════════════════════════
A sad legal c**p
I make no warranty whatsoever regarding this product. I assume no
responsiblity for any malicious impact on you, your computer, your red
blood cell production, or the sanity of the presidential candidate you
supported during the last election, made by the use or misuse of this
product.
══════════════════════════════════════════════════════════════════════════
Hi there,
When I knew very little programming, I was highly impressed by the cross
fading featured in the intro to _Chuck Yeager's Air Combat_. Now I know more
about graphics programing, I decided to sit down and do it.
Again, learn from it if you can. Rip this off if you want. You may even
include source in your own library as long as your library is a freeware as
well. I won't ask for any credit either. But if you find this useful, a
postcard would be nice, though.
══════════════════════════════════════════════════════════════════════════
Files
══════════════════════════════════════════════════════════════════════════
FADE.ASM This module contains some palette manipulating routines.
*.OBJ OBJ files. Compiled for large model.
MODEL.INC Include file for FADE.ASM
Change this if you would like to compile under a
different memory model.
CROSFADE.C A sample program demonstrating cross fading.
Link with FADE.ASM.
CROSFADE.PRJ Project file I used to link this program.
CROSFADE.EXE The executable.
IMAGE.RAW 320*200 raw image file used by FADEDEMO
PAL1.PAL palette file used by FADEDEMO
PAL2.PAL palette file used by FADEDEMO
CROSMAKE.ZIP This is the ZIP file containing the executable and
the source codes for the utility used to create
IMAGE.RAW, PAL1.PAL and PAL2.PAL
READMEOR.ELS You are reading this.
README.1st You read it before.
═════════════════════════════════════════════════════════════════════════
Okay, here is the idea behind this.
══════════════════════════════════════════════════════════════════════════
(WARNING: If you don't know binary maths+hexadecimal, the following may be
confusing to you.)
You know there is one byte located for each pixel in VGA 256 color mode(s),
right? Well, the idea is to divide this one byte for two images. So one
image uses the first four bit, and the other image uses the next four bit.
So each image can use 16 colors each. Let's say the first image goes
like this (Hexadecimal):
0 E 3 4 7 2 F
And the second image goes like this:
A 2 9 C D F 8
Then when we mix those images, the screen will look like this:
0A E2 39 4C 7D 2F F8
Okay, that should be straight forward. But the screen will probably look
like a mess. How do we make one image stand up?
* Now it's up to palette magic to take over the task. Let's say the palette *
* data for the each image is like this: *
Palette for Image 1 Palette for Image2
Col 0 : Black Col 0: Black
Col 1 : Blue Col 1: Very Very Dark Red
Col 2 : Red Col 2: Very Dark Red
... ...
Col 15: WHite Col 15: Light Red
And let's say we want to hide the second image and show the first image. Then
all we have to do is to set up the system palette like this:
Col 0 : Black
Col 1 : Black
...
Col 15(0F): Black
Col 16(10)-31(1F): Blue
Col 32(20)-63(2F): Red
and so on...
In other words, to hide the image stored in lower 4 bits and to show the
image stored in upper four bits, SET UP THE PALETTE so only upper four
bits make any difference. (You can see that 10,15,1F are all going to look
alike on the screen, right?)
Likewise, to hide the first image and show the second image stored in lower
four bits:
Col 0 (00): Black
Col 1 (01): Very Very Dark Red
Col 2 (02): Very Dark Red
...
Col 15(0F): Light Red
Col 16(10): Black
Col 17(11): Very Very Dark Red
Col 18(12): Very Dark Red
...
Col 31(1F): Light Red
..and so on..
So to fade from one image to another, what we need are:
-Screen that's mixture of two 16 color images
-Two palettes
And we smoothly fade from one palette to another and VOILA! We got
crossfading working!
══════════════════════════════════════════════════════════════════════════
What My Programs Do.
══════════════════════════════════════════════════════════════════════════
Okay, since I explained the idea behind crossfading, let me explain the
source codes. All CROSFADE.EXE does is:
-Load the bitmap image that's pre-mixed.
-Load the palettes that have been pre-processed as described in the
previous section.
-Fade between the two palettes.
It would be better idea to process the palettes in real time to save
memory. (loading two 16*3 byte long palettes vs. loading two 256*3 byte long
palettes.)
But I wanted to provide binary files you can take a look at.
Those image and palette files used by CROSFADE.EXE were created using
CROSMAKE.EXE, which is included in CROSMAKE.ZIP. The full content of
CROSMAKE.ZIP is:
CROSMAKE.EXE The executable
CROSMAKE.C The source code
FADE1.RAW The first 320*200 bitmap image. (Each pixel is 1 byte,
but only 16 colors are used.)
FADE1.PAL The palette file for the first bitmap
FADE2.RAW The second 320*200 bitmap image.
FADE2.PAL The palette file for the second bitmap.
You have your choices: You can choose to premix the images as I did, or
mix two images in real time. Once you grasp the concept, this crossfading
business is very easy to program.
══════════════════════════════════════════════════════════════════════════
About the palette fading routine used.
══════════════════════════════════════════════════════════════════════════
I recycled the palette morphing routine included in FADECODE.ZIP, which is
another source code package I released. If you want to see some explanation
for this piece of code, look for that package.
══════════════════════════════════════════════════════════════════════════
About Graphics
══════════════════════════════════════════════════════════════════════════
In case you have question about how to create bitmap images:
I used Deluxe Paint II Animation to paint the images. (It was a quickie
job with 16 colors, so they didn't turn out to be Leonardo or anything.)
Then I saved the images in PCX format. And I used a PCX utility I wrote to
extract the palette and raw format data used by CROSMAKE.EXE.
══════════════════════════════════════════════════════════════════════════
Where to go from here.
══════════════════════════════════════════════════════════════════════════
This concept of splitting the color byte to two has a lot of potential.
It should be possible to fade from the second image to third image, by
simply changing upper or lower 4 bits, and then fading to the third
palette.
Also you can choose to have one image that uses 32 colors and another that
uses 8 colors, instead of evenly dividing 8 bits..
Also it should be possible to animate both images while fading... It should
be possible to overlap two images instead of fading... It should be possible
to use transparent color for one bitmap... Oh boy, there are endless
possibilities...
══════════════════════════════════════════════════════════════════════════
To fellow coders
══════════════════════════════════════════════════════════════════════════
I have a very fast local bus VGA card. This toy allowed me to play _Strike
Commander_ on my 486/25. The problem is that many games and demos exhibit
intolerable amount of snow when they change palette.
I see strong evidences that many programmers are still sending palette data
byte by byte. (out dx,al) I use this command instead.
rep outsb
This rep outsb command format has been around since 80286 came out. For
Goodness' sake, use it!
I update 128 colors (384 bytes) at once and I get no snow on my video card.
(Updating 256 color at once gave me little snow, though.)
I am getting sick and tired of seeing snow on so many games and demos (Except
for some exceptions like _Zone66_.) If you don't want to use my routine for
palette fading, at least use rep outsb for updating palette.
══════════════════════════════════════════════════════════════════════════
About me
══════════════════════════════════════════════════════════════════════════
I am a second year computer engineering student attending Carnegie Mellon
University, Pittsburgh, Pennsylvania, USA.
I always hated the morons who release undocumented assembly source codes
with no explanation. But unfortunately, I myself isn't that good at
explaning things. So if you have specific questions while trying to decipher
what on earth I am raving about, ask me. I will try to rephrase. I really
want people to be able to understand my source codes and use them.
The surest and fastest way to reach me would be through the Internet.
My internet e-mail address is:
Esak+@cmu.edu
I will do my best to reply, but don't get upset if you don't get any. Flames,
outrageous requests, and questions like "I don't know C. What can I do?"
etc, will most likely be ignored.
If you don't have an internet account, or would like to send me a postcard,
a Lamborghini, a chunk of fissionable material, or an alien facehugger, use
the following address. (Valid for 1994-95 school year)
1060 MOREWOOD AVE.
Box No. 1504
PITTSBURGH PA 15213
USA
The alternate mailing address follows. It's the address of my uncle and
aunt's home.
Just make sure you use my real name (Hyun Yim) so they can forward the mails
correctly.
37 Blanan Drive
Chicopee, MA 01020-4803
USA
I used TC++3.0 and TASM 4.0. Use /m2 option when compiling with TASM.
Well, that's it for now. Watch out for my first game which will be released
sometime before the end of this millenium.
Esak
═════════════════════════════════════════════════════════════════════════
My friends are toys. I make them.
- JF Sebastian, from _BladeRunner_
My sister and I were driving along the other day when she asked me, what
would I like for my computer.
I thought long and hard about it, and came up with the following
hypothesis. When a girl gets a Barbie doll, she then wants the extra
ballgown for the doll, then the hairbrush, and the car, and the house,
and the friends etc.
When a guy gets a computer, he wants the extra memory, the bigger
hard drive, the maths co-pro, the better motherboard, the latest software,
and the bigger monitor etc.
I told my sister all of this, and finished up with : "So as you can
see, computers are Barbie dolls for MEN!"
She called me a chauvinist. And hit me. Hard.
- Grant Smith, aka DENTHOR of Asphyxia